/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package sv.com.intesal.general.controlador;

import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import sv.com.intesal.clases.abstracts.ControladorAbstract;
import sv.com.intesal.general.bean.Departamento;
import sv.com.intesal.general.bean.Municipio;
import sv.com.intesal.general.bean.Pais;
import sv.com.intesal.general.sql.SQLDepartamento;
import sv.com.intesal.general.sql.SQLMunicipio;

/**
 *
 * @author ejerez
 */
public class MunicipioControlador extends ControladorAbstract {

    public void insert(Municipio m) throws Exception {
        try {
            super.setPreparedStatement(SQLMunicipio.insert);
            super.ps.setInt(1, m.getCodigo_d());
            super.ps.setString(2, m.getNombre_m());
            super.ps.setString(3, v.getEstado(m.getEstado_filtro_m()));

            super.ps.executeUpdate();
        } catch (Exception ex) {
            throw new Exception(ex);
        } finally {
            super.setCloseConexion();
        }
    }

    public void update(Municipio m) throws Exception {
        try {
            super.setPreparedStatement(SQLMunicipio.update);

            super.ps.setInt(1, m.getCodigo_d());
            super.ps.setString(2, m.getNombre_m());
            super.ps.setString(3, v.getEstado(m.getEstado_filtro_m()));
            super.ps.setInt(4, m.getCodigo_m());

            super.ps.executeUpdate();
        } catch (Exception ex) {
            throw new Exception(ex);
        } finally {
            super.setCloseConexion();
        }
    }

    public List<Municipio> getMunicipios() throws Exception {
        List<Municipio> lista = new ArrayList<Municipio>();
        try {
            super.getExecuteQuery(SQLMunicipio.getMunicipios);

            while (super.rs.next()) {
                lista.add(this.getMunicipio(super.rs));
            }
            return lista;
        } catch (Exception ex) {
            throw new Exception(ex);
        } finally {
            super.setCloseConexion();
        }
    }

    public List<Municipio> getMunicipioActivos() throws Exception {
        List<Municipio> lista = new ArrayList<Municipio>();
        try {
            super.getExecuteQuery(SQLMunicipio.getMunicipiosActivos);

            while (super.rs.next()) {
                lista.add(this.getMunicipio(super.rs));
            }

            return lista;
        } catch (Exception ex) {
            throw new Exception(ex);
        } finally {
            super.setCloseConexion();
        }
    }

    public List<Municipio> getMunicipios_Activo_x_Departamento(Integer codigo_d) throws Exception {
        List<Municipio> lista = new ArrayList<Municipio>();
        try {
            super.setPreparedStatement(SQLMunicipio.getMunicipios_Activo_x_Departamento);
            super.ps.setInt(1, codigo_d);
            super.rs = ps.executeQuery();
            while (super.rs.next()) {
                lista.add(this.getMunicipio(super.rs));
            }
            return lista;
        } catch (Exception ex) {
            throw new Exception(ex);
        } finally {
            super.setCloseConexion();
        }
    }

    private Municipio getMunicipio(ResultSet rs) throws Exception {
        try {
            Municipio m = new Municipio();
            m.setCodigo_m(rs.getInt("codigo_m"));
            m.setCodigo_m2(rs.getInt("codigo_m"));
            m.setNombre_m(rs.getString("nombre_m"));
            m.setEstado_m(rs.getString("estado_m"));
            m.setEstado_filtro_m(v.getEstado(rs.getString("estado_m")));

            /*PAIS*/
            m.setCodigo_p(rs.getInt("codigo_p"));
            m.setNombre_p(rs.getString("nombre_p"));

            /*DEPARTAMENTO*/
            m.setCodigo_d2(rs.getInt("codigo_d"));
            m.setCodigo_d(rs.getInt("codigo_d"));
            m.setNombre_d(rs.getString("nombre_d"));
            return m;
        } catch (Exception ex) {
            throw new Exception(ex);
        }
    }

    public List<Pais> getPaisesActivos() throws Exception {
        try {
            PaisControlador pc = new PaisControlador();
            return pc.getPaisesActivos();
        } catch (Exception ex) {
            throw new Exception(ex);
        } finally {
            super.setCloseConexion();
        }
    }

    public List<Departamento> getDepartamentos_Activo_x_Pais(Integer codigo_p) throws Exception {
        try {
            DepartamentoControlador dc = new DepartamentoControlador();
            return dc.getDepartamentoActivos_x_Pais(codigo_p);
        } catch (Exception ex) {
            throw new Exception(ex);
        } finally {
            super.setCloseConexion();
        }
    }
}
